package com.clps.designPatterns.chapter01.里氏替换原则;

/**
 * - 存在，一个类型T1，和实例的对象O1
 * - 存在，一个类型T2，和实例的对象O2
 *
 * 如果将所有类型为T1的对象O1都替换成类型T2的对象O2，程序的行为不发生改变。那么类型T2是类型T1的子类型。换句话说，所有引用基类的地方必须能透明地使用其子类的对象。
 *
 * 注意:使用集成时,遵循里氏替换原则,在子类尽量不要重写父类的方法,子类可以扩展父类的功能,但不能改变原有的父类的功能,在合适的情况下,可以通过聚合,依赖等方式解决问题.
 */
public class C01_Calculate {
    public static void main(String[] args) {

        BizCalculate bizCalculate = new BizCalculate();
        System.out.println(bizCalculate.add(2,3));

    }
}
class Calculate{

}

class BaseCalculate extends  Calculate{
    public  int add(int a,int b){
        return  a+b;
    }
}
/**
 * 这里使用组合的方式完成计算
 */

class BizCalculate extends Calculate{
    private BaseCalculate baseCalculate = new BaseCalculate() ;
    public  int add(int a,int b){
        return  this.baseCalculate.add(a,b);
    }

}
